package com.qcby.finance.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.qcby.finance.base.entity.dto.SkuDTO;
import com.qcby.finance.entity.param.SkuParam;
import com.qcby.finance.entity.vo.SkuVo;
import com.qcby.finance.base.service.SkuService;
import com.qcby.framework.common.exception.ServiceException;
import com.qcby.framework.common.pojo.PageParam;
import com.qcby.framework.common.pojo.PageResult;
import com.qcby.framework.common.pojo.Result;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 劝书
 * @since 2023-02-19
 */
@Api(tags = "sku接口")
@RestController
@RequestMapping("/sku")
@Slf4j
public class SkuController {
    @Resource
    private SkuService skuService;

    /**
     * 展示所有的sku，并分页（15条一页）
     * @return
     */
    @ApiOperation(value = "展示sku")
    @GetMapping("/show-sku")
    public Result<PageResult<SkuVo>> showSku(SkuParam skuParam, PageParam pageParam){
        SkuDTO skuDTO = BeanUtil.copyProperties(skuParam,SkuDTO.class);
        Result<PageResult<SkuDTO>> pageResultResult = skuService.showSku(skuDTO,pageParam);
        //dto--->转vo
        List<SkuVo> skuVos = BeanUtil.copyToList(pageResultResult.getData().getList(),SkuVo.class);
        /**构造返回对象**/
        PageResult<SkuVo> pageResult = new PageResult();
        pageResult.setTotal(pageResultResult.getData().getTotal());
        pageResult.setList(skuVos);
        return Result.getSuccessResult(pageResult);
    }

    /**
     * 分组展示sku，并分页（15条一页）
     * @return
     */
    @ApiOperation(value = "分组展示sku")
    @GetMapping("/show-group-sku")
    public Result<PageResult<SkuVo>> showGroupSku(SkuParam skuParam, PageParam pageParam){
        SkuDTO skuDTO = BeanUtil.copyProperties(skuParam,SkuDTO.class);
        Result<PageResult<SkuDTO>> pageResultResult = skuService.showGroupSku(skuDTO,pageParam);
        //dto--->转vo
        List<SkuVo> skuVos = BeanUtil.copyToList(pageResultResult.getData().getList(),SkuVo.class);
        /**构造返回对象**/
        PageResult<SkuVo> pageResult = new PageResult();
        pageResult.setTotal(pageResultResult.getData().getTotal());
        pageResult.setList(skuVos);
        return Result.getSuccessResult(pageResult);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @GetMapping("/sku-by-id")
    public Result<SkuVo> getSkuById(@Valid @NotNull Long id){
        SkuDTO skuById = skuService.getSkuById(id);
        return Result.getSuccessResult(BeanUtil.copyProperties(skuById,SkuVo.class));
    }

    /**
     * 添加sku
     * @return
     */
    @PostMapping("/add-sku")
    public Result<Boolean> addSku(@RequestBody SkuParam skuParam){
        if (ObjectUtil.isNull(skuParam.getId())){
            throw new ServiceException("500","id不能为空");
        }
        // params转dto
        SkuDTO skuDTO = BeanUtil.copyProperties(skuParam,SkuDTO.class);
        int code = skuService.addSku(skuDTO);
        return Result.getSuccessResult(code>0);
    }

    /**
     * 修改sku
     * @return
     */
    @PostMapping("/edit-sku")
    public Result<Boolean> editSku(@RequestBody SkuParam skuParam){
        /**参数校验**/
        if(ObjectUtil.isNull(skuParam.getSkuNo())){
            throw new ServiceException("500","sku编号不能为空");
        }
        // params转dto
        SkuDTO skuDTO = BeanUtil.copyProperties(skuParam,SkuDTO.class);
        skuService.editSku(skuDTO);
        return Result.getSuccessResult(Boolean.TRUE);
    }

    /**
     * 删除sku
     * @param id
     * @return
     */
    @GetMapping("delete-sku")
    public Result<Boolean> deleteSku(@Valid @NotNull Long id){
        return Result.getSuccessResult(skuService.deleteSku(id));
    }



}

